// 笔试强训day33:字符串的排列

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return string字符串vector
     */

    void makestrings(int n, string&str)
    {
        if(n == 1)
            ans.emplace(tmp + str[0]);
        else
        {
            for(int i = 0; i < n; i++)
            {
                tmp += str[i];
                swap(str[i], str[n - 1]);
                makestrings(n - 1, str);
                swap(str[i], str[n - 1]);
                tmp.pop_back();
            }
        };
    }
    
    vector<string> Permutation(string str) {
        int n = str.size();
        makestrings(n, str);
        vector<string> ret(ans.begin(), ans.end());
        if(ret.empty()) ret.emplace_back("");
        return ret;
    }

    unordered_set<string> ans;
    string tmp;
};